package projeto.administrativo.funcionario.cdp;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.ManyToMany;
import javax.persistence.OneToOne;
import javax.persistence.OrderBy;

import nucleo.comuns.util.UtilitarioSerializacao;

import plataforma.autenticacao.cdp.Usuario;
import plataforma.base.cdp.IObjetoAtivoInativo;
import plataforma.base.cdp.ObjetoPersistente;
import projeto.comercial.funcaoservico.cdp.FuncaoServico;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.INTEGER, name = "tipo")
public class ResponsavelAtividade extends ObjetoPersistente implements
		IObjetoAtivoInativo {

	/**
	 * 
	 */
	private static final long serialVersionUID = UtilitarioSerializacao.getIDSerializacao();
	
	String nome;
	String email;		
	String telefoneOutro;
	String endereco;
	boolean ativo;
	private int tipo;
	
	Usuario usuario;
	
	private Set<FuncaoServico> funcaoServico = new HashSet<FuncaoServico>();

	@ManyToMany(cascade = {CascadeType.MERGE,CascadeType.REFRESH,CascadeType.REMOVE}, fetch = FetchType.LAZY)
	@OrderBy(value="descricao")
	public Set<FuncaoServico> getFuncaoServico() {
		return funcaoServico;
	}

	public void setFuncaoServico(Set<FuncaoServico> funcaoServico) {
		this.funcaoServico = funcaoServico;
	}

	public ResponsavelAtividade() {
		ativo = true;

	}



	@Column(nullable=false)
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}


	public String getTelefoneOutro() {
		return telefoneOutro;
	}

	public void setTelefoneOutro(String telefoneOutro) {
		this.telefoneOutro = telefoneOutro;
	}

	@Column(nullable=true)
	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	@OneToOne(fetch=FetchType.LAZY)
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	@Column(insertable = false, updatable = false)
	public int getTipo() {
		return tipo;
	}

	public void setTipo(int tipo) {
		this.tipo = tipo;
	}

	@Override
	@Column(columnDefinition="boolean default false")
	public boolean isAtivo() {
		return ativo;
	}

	@Override
	public void setAtivo(boolean isAtivo) {
		this.ativo = isAtivo;

	}

}
